/**
 * 
 */
package com.kclmedu.forhelp.data;

import java.awt.Component;
import java.util.HashMap;
import java.util.Map;

import javax.swing.AbstractCellEditor;
import javax.swing.JCheckBox;
import javax.swing.JTable;
import javax.swing.table.TableCellEditor;

import org.apache.log4j.Logger;

/**
 * @author Administrator
 *
 */
public class MyCheckBoxEditor extends AbstractCellEditor implements TableCellEditor {

	/**
	 * 
	 */
	private static final long serialVersionUID = 3574616647257848698L;
	
	private static final Logger LOGGER = Logger.getLogger(MyCheckBoxEditor.class);
	
	//存放所有的复选框
	private Map<Integer, JCheckBox> allBox;
	//记录当前的复选框
	private JCheckBox curCheckBox; //存放当前的CheckBox
	
	public MyCheckBoxEditor() {
		this.allBox = new HashMap<>();
		LOGGER.info("...构造  MyCheckBoxEditor...");
	}
	//

	/*************
	 * 这个方法决定了单元格内的元素类型
	 */
	@Override
	public Object getCellEditorValue() {
		//
		LOGGER.debug(">>> 调用 getCellEditorValue方法  => "+curCheckBox.getText()+"->状态："+curCheckBox.isSelected());
		//此处应该返回checkBox
		return curCheckBox;
	}

	@Override
	public Component getTableCellEditorComponent(JTable table, Object value, 
											boolean isSelected, int row, int column) {
		LOGGER.debug(">>> 调用getTableCellEditorComponent方法...");
		JCheckBox checkBox = (JCheckBox)value;
		//赋值给 curCheckBox
		this.curCheckBox = checkBox;
		//设置 checkbox的样式
		checkBox.setBackground(table.getBackground());
		checkBox.setForeground(table.getForeground());
		//
		String label = (value == null) ? "" : ((JCheckBox)value).getText();
		//
		checkBox.setText(label);
		//把这个CheckBox添加到集合中
		LOGGER.debug("当前行："+row+" => 对应的CheckBox组件："+checkBox.getText());
		LOGGER.debug("    >>>点击的行："+row+",列: "+column);
		//把当前的组件添加到集合中
		this.allBox.put(column, checkBox);
		//
		LOGGER.info("当前BoxMap中的元素个数："+this.allBox.size());
		//
		return checkBox;
	}

	/***************
	 * 为后面数据导出做准备
	 * 此 Map的key就是列号,这样我们就可以知识哪一列的checkBox是被选中的，然后只导出此列的数据
	 * @return
	 */
	public Map<Integer, JCheckBox> getAllBox() {
		return allBox;
	}

}
